using HotelManageSystem.Dto;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace HotelManageSystem.Service {
    public interface IHotelManageService {
        // 查询-------------------------------------------------\
        // -查询所有
        Task<ServiceResponse<List<GetWorkerDto>>> 查询所有员工信息();
        Task<ServiceResponse<List<GetUserDto>>> 查询所有用户信息();
        Task<ServiceResponse<List<GetRoomDto>>> 查询所有房间信息();
        // -其他
        Task<ServiceResponse<List<Bill>>> 查询房间账单(int roomId);
        Task<ServiceResponse<List<获取预定信息Dto>>> 按用户Id查询预定信息(string userId);
        // 查询-------------------------------------------------/


        // 用户信息 --------------------------------------------\
        //7.2
        Task<ServiceResponse<int>> 登记用户(AddUserDto newUser);
        Task<ServiceResponse<GetUserDto>> 按用户Id查询用户信息(string userId);
        //2.1 7.2
        Task<ServiceResponse<List<GetUserDto>>> 按用户名称查询用户信息(string userName);
        // 用户信息 --------------------------------------------/

        //1.1 取消预定
        Task<ServiceResponse<int>> 撤销预定(CancelPreOrderDto canceledPreOrder);
        //1.3 预约
        Task<ServiceResponse<int>> 登记预定(AddPreOrderDto newPreOrder);
        //1.4 房态管理
        Task<ServiceResponse<GetRoomDto>> UpdateRoom(UpdateRoomDto updatedRoom);
        Task<ServiceResponse<GetRoomDto>> 按房间号查询房间信息(int roomId);

        Task<ServiceResponse<获取账单信息Dto>> 按房间Id查询账单信息随后结账(int roomId);
        Task<ServiceResponse<int>> 房间变更(房间变更Dto dto);
        Task<ServiceResponse<int>> 房间状态变更(房间状态变更Dto dto);
        Task<ServiceResponse<int>> 房型价格变更(更改房间价格Dto dto);
        Task<ServiceResponse<int>> 添加账单(添加账单Dto dto);
        Task<ServiceResponse<GetWorkerDto>> 通过名称查询员工信息(string workerName);
        Task<ServiceResponse<GetWorkerDto>> 通过Id查询员工信息(int workerId);

        //6.2 员工信息查询
        Task<ServiceResponse<GetWorkerDto>> GetWorker(string workerId);
        //
        Task<ServiceResponse<int>> AddWorker(AddWorkerDto newWorker);

        //6.3
        Task<ServiceResponse<int>> 添加房间(AddRoomDto newRoom);
        Task<ServiceResponse<int>> 结账(int roomId);
        //2.2 6.4 入住信息查询
        Task<ServiceResponse<List<SearchCheckInInfoDto>>> 按用户Id搜索入住信息(string userId);
        //2.3
        Task<ServiceResponse<int>> 通过预定入住(int preOrderId);
        Task<ServiceResponse<int>> 直接入住(入住Dto dto);
        Task<ServiceResponse<Dictionary<int, List<TimePair>>>> 查询预定以及入住时间();

    }
}